package top.chenbn.guli.common.util;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 统一返回结果的类
 *
 * @author chbn
 * @create 2020-06-26
 */
@Data
public class Result {
  @ApiModelProperty(value = "是否成功")
  private Boolean success;

  @ApiModelProperty(value = "返回码")
  private Integer code;

  @ApiModelProperty(value = "返回消息")
  private String message;

  @ApiModelProperty(value = "返回数据")
  private Map<String, Object> data = new HashMap<>();

  // 构造方法私有化
  private Result() {}

  // 成功的静态方法
  public static Result ok() {
    Result result = new Result();
    result.setSuccess(true);
    result.setCode(ResultCode.SUCCESS);
    result.setMessage("成功");
    return result;
  }

  // 失败的静态方法
  public static Result error() {
    Result result = new Result();
    result.setSuccess(false);
    result.setCode(ResultCode.ERROR);
    result.setMessage("失败");
    return result;
  }

  public Result success(Boolean success) {
    this.setSuccess(success);
    return this;
  }

  public Result message(String message) {
    this.setMessage(message);
    return this;
  }

  public Result code(Integer code) {
    this.setCode(code);
    return this;
  }

  public Result data(String key, Object value) {
    this.data.put(key, value);
    return this;
  }

  public Result data(Map<String, Object> map) {
    this.setData(map);
    return this;
  }
}
